/**
 * Universidad Del Valle De Guatemala.
 * Algoritmos y Estructuras de Datos.
 * Sección 20.
 * Miguel Enrique Zea Arenales.
 * Carné 09238.
 * Hoja de Trabajo 8.
 * 08/11/2012
 */
package shortestpath;

/**
 * Interfaz genérica de la estructura de datos Grafo.
 */
public interface Graph<V,E> {
    
    /**
     * Pre: ninguna.
     * Post: se agrega un vértice al grafo.
     */
    public void add(V label);

    /**
     * Pre: deben existir por lo menos 1 vértice.
     * Post: se crea un arco entre los vértices especificados.
     */
    public void addEdge(E label);

    /**
     * Pre: el grafo debe contener al menos un vértice.
     * Post: regresa verdadero si el vértice especificado existe en el grafo.  
     */
    public boolean contains(V label);

    /**
     * Pre: ninguna.
     * Post: retorna el número de vértices contenidos en el grafo.
     */
    public int size();

    /**
     * Pre: ninguna.
     * Post: elimina los contenidos del grafo.
     */
    public void clear();

    /**
     * Pre: ninguna.
     * Post: retorna verdadero si y sólo si el grafo no contiene vértices.
     */
    public boolean isEmpty();

    /**
     * Pre: ninguna.
     * Post: retorna verdadero si y sólo si el grafo es dirigido.
     */
    public boolean isDirected();
}
